W module tym prezentujemy kod w MATLABie obliczający i rysujący funkcje bazowe B-spline na podstawie zadanego wektora węzłów.
Możliwym alternatywnym darmowym środowiskiem do uruchomienia kodu jest Octave.
Po zainstalowaniu Octave otwieramy plik (pobierz kod lub zob. Załącznik 2 ).
Uruchomienie kodu rozpoczyna się od procedury spline(), która ustawia przykładowy wektor węzłów knot_vector=[1,1,1,2,3,3,4,5,6,7,7,7],
następnie oblicza liczbę funkcji bazowych używając procedury compute_nr_basis_functions(), oblicza stopień funkcji bazowych (jednorodny dla całego wektora węzłów) używając procedury compute_p, oraz wektor punktów x, w których policzone zostaną funkcje bazowe używając procedury mesh().
Kod generuje wartości funkcji bazowych w tych punktach, używając procedury compute_spline() i następnie rysuje funkcje używając w pętli komendy plot.
Możliwa jest modyfikacja wektora węzłów w celu generacji różnych baz.
Proszę wygenerować wektor węzłów generujący bazę równoważną bazie Lagrange'a wielomianów pierwszego stopnia na dwóch elementach [0,1] i [1,2]. Proszę uruchomić kod MATLABa i narysować funkcje bazowe.
Proszę wygenerować wektor węzłów generujący bazę równoważną bazie Lagrange'a wielomianów czwartego stopnia na pięciu elementach [0,1] i [1,2] i [2,3] i [3,4] i [4,5]. Proszę uruchomić kod MATLABa i narysować funkcje bazowe.
Proszę wygenerować wektor węzłów generujący bazę wielomianów B-spline trzeciego stopnia o ciągłości C2 rozpiętą na trzech elementach [0,0.1] i [0.1,0.9] i [0.9 1]. Proszę uruchomić kod MATLABa i narysować funkcje bazowe.
Rozwiązanie:
[0 0 0 0 0.1 0.9 1 1 1 1]
Zadanie 4: Wielomiany B-spline trzeciego stopnia o ciągłości C1
Treść zadania:
Proszę wygenerować wektor węzłów generujący bazę wielomianów B-spline trzeciego stopnia o ciągłości C1 rozpiętą na czterech elementach [0,1] i [1,2] i [2,3] i [3,4]. Proszę uruchomić kod MATLABa i narysować funkcje bazowe.
Rozwiązanie:
[0 0 0 0 1 1 2 2 3 3 4 4 4 4]
Zadanie 5: Dwuwymiarowe wielomiany B-spline
Treść zadania:
Proszę zmodyfikować kod, tak żeby rysował dwuwymiarowe B-spline'y na obszarze wynikającym z iloczynu tensorowego dwóch wektorów węzłów. Proszę użyć funkcji meshgrid or surf MATLABa. Proszę uruchomić kod MATLABa dla wektorów węzłów [0 0 0 0 1 2 3 4 4 4 4 ] x [0 0 1 2 3 4 4] i narysować funkcje bazowe.
\( \% \)X and Y coordinates of points over the 2D mesh
[X,Y]=meshgrid(x,y);
hold on
for i=1:nrx
\( \% \)compute values of
vx=compute_spline(knot_vectorx,px,i,X);
for j=1:nry
vy=compute_spline(knot_vectory,py,j,Y);
surf(X,Y,vx.*vy);
endfor
endfor
hold off
Zaloguj się/Zarejestruj w OPEN AGH e-podręczniki
Przypominanie hasła
Moduł został dodany
Dziękujemy za rejestrację!
Na wskazany w rejestracji adres został wysłany e-mail z linkiem aktywacyjnym.